package org.obvial.obvial;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Observable;

public class ListaParticipantes extends Observable{
	
	private ArrayList <Participante> listaP;
	private static  ListaParticipantes miListaParticipantes = new ListaParticipantes();
	private ListaParticipantes(){
		listaP = new ArrayList <Participante> ();
	}
	
	public static ListaParticipantes getListaParticipantes() {
		return miListaParticipantes;
	}

	public void anadirParticipante(String pNombre, String pColor){
		
		if (listaP.size() == 4){
			System.out.println("No se pueden anadir mas jugadores");
		}else{
			if(listaP.size() < 4){
				Participante p = new Participante (pNombre, pColor, listaP.size() +1);
				listaP.add(p);
				setChanged();
				notifyObservers(p);
				GestorCasillas.getGestorCasillas().anadirParticipanteACasilla(p, p.getPosicion());
			}
		}
	}
	
	public Iterator <Participante> getIterador(){
		return listaP.iterator();
	}
	
	public Participante buscarParticipante(int pId){
		Iterator <Participante> itrP = this.getIterador();
	
		boolean enc = false;
		Participante res = null;
		
		while (itrP.hasNext() && enc == false){
			res = itrP.next();
			if (res.compararId(pId)){
				enc = true;
			}
		}
		
		if ( enc == false){
			res = null;
		}
		
		return res;
	}
	
	public boolean algunoHaTerminado(){
		Iterator<Participante> itrP = this.getIterador();
		
		boolean ret = false;
		Participante unParticipante = null;
		
		while(itrP.hasNext() && ret == false){
			unParticipante = itrP.next();
			if(unParticipante.haFinalizado() == true){
				ret = true;
			}
		}
		
		return ret;
	}
	
	public void vaciarLista(){
		listaP = new ArrayList<Participante>();
	}
	
	//Para las pruebas
	public ArrayList <Participante> getListaP(){
		return listaP;
	}





}
